/**
 * 
 */
package de.mbenning.fsim.persistence.dao;

import java.util.List;

import org.hibernate.ObjectNotFoundException;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

import de.mbenning.fsim.domain.Land;
import de.mbenning.fsim.domain.Saison;
import de.mbenning.fsim.domain.Verein;
import de.mbenning.fsim.domain.VereinStatistik;
import de.mbenning.fsim.persistence.dao.interfaces.IVereinDAO;

/**
 * @author Martin.Benning
 *
 */
@Repository("vereinDAO")
public class VereinDAO extends HibernateDaoSupport implements IVereinDAO {
	
	@Autowired
	public VereinDAO(SessionFactory sessionFactory) {
		this.setSessionFactory(sessionFactory);
	}
	
	@SuppressWarnings("unchecked")
	public List<Verein> findAllVereine() {
		return getHibernateTemplate().find(" FROM Verein A ORDER BY A.name ");
	}

	@SuppressWarnings("unchecked")
	public List<Verein> findAllVereineByLand(Land land) {
		return getHibernateTemplate().find(" FROM Verein A WHERE A.adresse.land.id = ?", land.getId());
	}

	public Verein getVereinById(Integer id) {
		for (final Object object : getHibernateTemplate().find(" FROM Verein A WHERE A.id = ?", id)) {
            return (Verein) object;
        }
        throw new ObjectNotFoundException("Verein", Verein.class.getName());
	}

	public Verein getVereinByName(String name) {
		for (final Object object : getHibernateTemplate().find(" FROM Verein A WHERE A.name = ?", name)) {
            return (Verein) object;
        }
        throw new ObjectNotFoundException("Verein", Verein.class.getName());
	}

	@SuppressWarnings("unchecked")
	public List<Verein> findVereineByName(String name) {
		return getHibernateTemplate().find(" FROM Verein A WHERE A.name LIKE '" + name.replace("*", "%") + "%' ORDER BY A.name ");
	}

	public VereinStatistik getVereinStatistik(Verein verein, Saison saison) {
		for (final Object object : getHibernateTemplate().find(" FROM VereinStatistik A WHERE A.verein.id = ? AND A.saison.id =  ?", new Integer[] {verein.getId(), saison.getId()})) {
            return (VereinStatistik) object;
        }
        throw new ObjectNotFoundException("VereinStatistik", VereinStatistik.class.getName());
	}

	@SuppressWarnings("unchecked")
	public List<VereinStatistik> findAllVereinStatistik(Verein verein) {
		return getHibernateTemplate().find(" FROM VereinStatistik A WHERE A.verein.id = ? ", verein.getId());
	}
	
	

}
